/**  
 * All rights Reserved, Designed By www.ccbao56.com
 * @Title:  SwaggerConfig.java   
 * @Package org.ccbao.finance.api.config   
 * @Description:    TODO (用一句话描述该文件做什么)   
 * @author: daiw     
 * @date:   2019年6月26日 上午9:43:49   
 * @Copyright: 2019 www.ccbao56.com Inc. All rights reserved. 
 * 注意：本内容仅限于深圳旭珩科技有限公司内部传阅，禁止外泄以及用于其他的商业目
 */
package org.easyframework.swagger;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @ClassName: SwaggerConfig
 * @Description: SwaggerConfig
 * @author: daiw
 * @date: 2019年6月26日 上午9:43:49
 * 
 * @Copyright: 2019 www.ccbao56.com Inc. All rights reserved.
 *             注意：本内容仅限于深圳旭珩科技有限公司内部传阅，禁止外泄以及用于其他的商业目
 */
@EnableSwagger2
@Configuration
public class SwaggerConfig {
	@Value("${swagger.scan.package}")
	private String scanPackage;
	@Value("${swagger.title}")
	private String title;
	@Value("${swagger.description}")
	private String description;
	@Value("${swagger.service.url}")
	private String termsOfServiceUrl;
	@Value("${swagger.version}")
	private String version;

	@Bean
	public Docket createRestApi() {
		ParameterBuilder ticketPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();  
    	ticketPar.name("xxlSsoSessionid").description("user session id")
    	.modelRef(new ModelRef("string")).parameterType("header") 
    	.required(false).build(); //header中的ticket参数非必填，传空也可以
    	pars.add(ticketPar.build());    //根据每个方法名也知道当前方法在设置什么参数
		System.out.println("初始化swagger Docket");
		return new Docket(DocumentationType.SWAGGER_2)//
				.apiInfo(apiInfo())//
				.select()//
				.apis(RequestHandlerSelectors.basePackage(scanPackage)) //Controller所在包(必须新建包)
				.paths(PathSelectors.any()).build().globalOperationParameters(pars);
	}

	private ApiInfo apiInfo() {
		System.out.println("初始化swagger ApiInfo");
		return new ApiInfoBuilder().title(title) //标题
				.description(description) //描述
				.termsOfServiceUrl(termsOfServiceUrl) //超链接
				.version(version).build();
	}

}
